package loader

import (
	"lark/src/object"
)

// Module 模块接口
type StdModule interface {
	Name() string            // 模块名称
	Methods() *object.Module // 模块方法
}

// StandardLibrary 标准库注册表
type StandardLibrary struct {
	modules map[string]StdModule
}

// NewStandardLibrary 创建标准库
func NewStandardLibrary() *StandardLibrary {
	return &StandardLibrary{
		modules: make(map[string]StdModule),
	}
}

// RegisterModule 注册模块
func (sl *StandardLibrary) RegisterModule(module StdModule) {
	sl.modules[module.Name()] = module
}

// GetModule 获取模块
func (sl *StandardLibrary) GetModule(name string) (StdModule, bool) {
	module, ok := sl.modules[name]
	return module, ok
}
